import { segment } from 'oicq'
import plugin from '../../lib/plugins/plugin.js'


let muteTime = 1 //禁言时间 单位分钟
let detectionTime = 3 //每次检测多久 单位秒 从发送的第一条消息开始计算,结束后重新计数
let msgNum = 4 //消息条数 和上面的检测时间一起 检测时间内发送消息数量达到这个数就禁言
let group = ['12345678', '123456789'] //开启的群聊多个群用'',隔开
let msg = `不许刷屏！`//触发之后发送的消息 为空则不发消息只禁言


/* 

    宣传一下小群154687817

    1.0:检测到刷屏自动禁言,机制为上面的检测时间内发送的消息数量达到设置的数量时就触发禁言,
        检测时间从发送的第一条开始计时,所以可能会出现在计时快结束的时候发消息然后到时间了就触发下一个计时,导致本应该禁言的但是没有,

        使用前请将Yunzai-Bot/config/config/group.yaml中的singleCD个人操作冷却时间改为0,不然会失效,介意勿用

*/


export class example extends plugin {
    constructor() {
        super({
            /** 功能名称 */
            name: '检测刷屏禁言',
            /** 功能描述 */
            dsc: '简单开发示例',
            /** https://oicqjs.github.io/oicq/#events */
            event: 'message.group',
            /** 优先级，数字越小等级越高 */
            priority: 1,
            rule: [
                {
                    /** 命令正则匹配 */
                    reg: '',
                    /** 执行方法 */
                    fnc: 'mute',
                    log: false
                }
            ]
        })
    }

    async mute(e) {
        if (group) {
            if (!group.some(item => item.includes(e.group_id))) {
                return false
            }
        }
        let muteConfig = getMuteConfig(e)
        muteConfig.msg.push(e.toString())
        if (muteConfig.msg.length >= msgNum) {
            if (e.group.is_admin || e.group.is_owner) {
                let Memberinfo = e.group.pickMember(Number(e.user_id)).info
                if (Memberinfo.role === 'owner') {
                    return false
                }
                if (Memberinfo.role === 'admin') {
                    if (!e.group.is_owner) return false
                }

                await e.group.muteMember(e.user_id, muteTime * 60);
                if (msg) {
                    e.reply([segment.at(e.user_id),` 不许刷屏！`])
                }
            }
            muteConfig.delete()
            return true
        }

        if (!muteConfig.timer) {
            muteConfig.timer = setTimeout(() => {
                muteConfig.delete()
            }, detectionTime * 1000)
        }
        return false
    }


}

const muteConfigMap = new Map()

function getMuteConfig(e) {
    let key = e.group_id + ':' + e.user_id
    let config = muteConfigMap.get(key)
    if (config == null) {
        config = {
            // 计时器timer
            timer: null,
            // 接收到的消息
            msg: [],
            // 删除自身，等待释放内存
            delete: () => muteConfigMap.delete(key),
        }
        muteConfigMap.set(key, config)
    }
    return config
}
